﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Configuration;
using System.Drawing;

namespace ivv.relatorios
{
    public partial class relatorioComparativoQuarto : System.Web.UI.Page
    {
        public string relatorio;

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                SqlConnection conexaoNovaSelect = new SqlConnection(ConfigurationManager.AppSettings["baseDadosNova"]);
                conexaoNovaSelect.Open();

                string selectAno = "select distinct anoIvv FROM ivv order by anoIvv desc";

                SqlCommand cmd = new SqlCommand(selectAno, conexaoNovaSelect);
                SqlDataReader dr = cmd.ExecuteReader();

                ListItem comeco = new ListItem();

                comeco.Text = "Selecione um ano";
                comeco.Value = "nulo";

                lstAno.Items.Add(comeco);

                int cont = 0;

                if (dr.HasRows)
                {
                    while (dr.Read())
                    {
                        ListItem dados = new ListItem();

                        dados.Text = dr["anoIvv"].ToString();
                        dados.Value = cont.ToString();

                        lstAno.Items.Add(dados);

                        cont++;
                    }
                }

                dr.Close();

                conexaoNovaSelect.Close();
            }
        }

        protected void lstAno_SelectedIndexChanged(object sender, EventArgs e)
        {
            lstMes.Items.Clear();

            ListItem comeco = new ListItem();

            comeco.Text = "Selecione um mês";
            comeco.Value = "nulo";

            lstMes.Items.Add(comeco);

            for (int i = 1; i < 13; i++)
            {
                ListItem dados = new ListItem();

                dados.Text = pegarMes(i);
                dados.Value = i.ToString();

                lstMes.Items.Add(dados);
            }
        }

        public string pegarMes(int mes)
        {
            string textoMes = "";

            switch (mes)
            {
                case 1: textoMes = "Janeiro";
                    break;
                case 2: textoMes = "Fevereiro";
                    break;
                case 3: textoMes = "Março";
                    break;
                case 4: textoMes = "Abril";
                    break;
                case 5: textoMes = "Maio";
                    break;
                case 6: textoMes = "Junho";
                    break;
                case 7: textoMes = "Julho";
                    break;
                case 8: textoMes = "Agosto";
                    break;
                case 9: textoMes = "Setembro";
                    break;
                case 10: textoMes = "Outubro";
                    break;
                case 11: textoMes = "Novembro";
                    break;
                default: textoMes = "Dezembro";
                    break;
            }
            return textoMes;
        }

        protected void btnGerar_Click(object sender, EventArgs e)
        {
            if (lstAno.SelectedValue != "nulo")
            {
                if (lstMes.SelectedValue != "nulo")
                {
                    carregarDados(Convert.ToInt16(lstAno.SelectedItem.Text), Convert.ToInt16(lstAno.SelectedItem.Text) - 1, lstMes.SelectedValue, lstMes.SelectedItem.Text);

                    Panel1.Visible = true;
                }
                else
                {
                    //mensagem java script
                    string literalcc = "<script language=JavaScript>mensagem('Informe o mês');</script>";
                    Panel1.Controls.Add(new LiteralControl(literalcc));
                    lstMes.Focus();
                }
            }
            else
            {
                //mensagem java script
                string literalcc = "<script language=JavaScript>mensagem('Informe o ano');</script>";
                Panel1.Controls.Add(new LiteralControl(literalcc));
                lstAno.Focus();
            }
        }

        void carregarDados(int ano, int anoAnterior, string mes, string mesTexto)
        {
            totais t = new totais();

            List<string> quartoTipoO = new List<string>();
            List<string> quartoTipoV = new List<string>();

            List<double> quantidadeTotalO = new List<double>();
            List<double> quantidadeTotalV = new List<double>();

            double quantidadeO1 = 0;
            double quantidadeO2 = 0;
            double quantidadeO3 = 0;
            double quantidadeO4 = 0;

            double quantidadeV1 = 0;
            double quantidadeV2 = 0;
            double quantidadeV3 = 0;
            double quantidadeV4 = 0;

            //List<double> quantidadeTotalOAnterior = new List<double>();
            //List<double> quantidadeTotalVAnterior = new List<double>();

            if (mes.Length == 1)
            {
                mes = "0" + mes;
            }

            relatorio = "<table id=\"relat\" width=100% border=2 cellpadding=5 cellspacing=0 bordercolor=#ffffff>";
            relatorio += "<tr>";
            relatorio += "<th colspan=\"8\">";
            relatorio += "OFERTAS E VENDAS TOTAIS POR Nº DE QUARTOS <br />MERCADO IMOBILIÁRIO DA RM RECIFE - IMÓVEIS";
            relatorio += " RESIDENCIAIS " + mesTexto.ToUpper() + "/" + ano + "";
            relatorio += "</th>";
            relatorio += "</tr>";
            relatorio += "<tr>";
            relatorio += "<th rowspan=\"3\" width=\"150px\">Nº DE QUARTOS</th>";
            relatorio += "<th colspan=\"3\">OFERTAS</th>";
            relatorio += "<th colspan=\"3\">VENDAS</th>";
            //relatorio += "<th rowspan=\"2\">";
            //relatorio += "Jan – " + mesTexto.Substring(0, 3) + "/" + ano + "<br />";
            //relatorio += "Jan – " + mesTexto.Substring(0, 3) + "/" + anoAnterior + "";
            //relatorio += "</th>";
            relatorio += "</tr>";
            relatorio += "<tr>";
            relatorio += "<th colspan=\"6\">" + mesTexto.ToUpper() + "</th>";
            relatorio += "</tr>";
            relatorio += "<tr>";
            relatorio += "<th>Unidade</th>";
            relatorio += "<th>(%)</th>";
            relatorio += "<th>";
            relatorio += "Jan – " + mesTexto.Substring(0, 3) + "/" + ano + "<br />";
            relatorio += "Jan – " + mesTexto.Substring(0, 3) + "/" + anoAnterior + "";
            relatorio += "</th>";
            relatorio += "<th>Unidade</th>";
            relatorio += "<th>(%)</th>";
            relatorio += "<th>";
            relatorio += "Jan – " + mesTexto.Substring(0, 3) + "/" + ano + "<br />";
            relatorio += "Jan – " + mesTexto.Substring(0, 3) + "/" + anoAnterior + "";
            relatorio += "</th>";
            relatorio += "</tr>";

            double quartoO = 0;
            double quartoV = 0;
            double totalQuartoO = 0;
            double totalQuartoV = 0;
            double totalQuartoOAnterior = 0;
            double totalQuartoVAnterior = 0;
            int i;

            for (i = 1; i <= 4; i++)
            {
                relatorio += "<tr>";

                if (i == 4)
                {
                    quartoO = validar(t.quantitativoDesejado(mes, ano.ToString(), 5, i));
                    quartoV = validar(t.quantitativoDesejado(mes, ano.ToString(), 6, i));

                    quantidadeO4 = validar(t.quantitativoDesejado(mes, (ano - 1).ToString(), 5, i));
                    quantidadeV4 = validar(t.quantitativoDesejado(mes, (ano - 1).ToString(), 6, i));

                    relatorio += "<td>4 ou +</td>";
                    relatorio += "<td>" + quartoO + "</td>";
                    relatorio += "<td>oferta" + i + "%</td>";
                    relatorio += "<td>" + Math.Round(((quartoO - quantidadeO4) * 100) / quantidadeO4, 1) + "%</td>";
                    relatorio += "<td>" + quartoV + "</td>";
                    relatorio += "<td>venda" + i + "%</td>";
                    relatorio += "<td>" + Math.Round(((quartoV - quantidadeV4) * 100) / quantidadeV4, 1) + "%</td>";

                    quartoTipoO.Add("oferta" + i);
                    quartoTipoV.Add("venda" + i);

                    quantidadeTotalO.Add(quartoO);
                    quantidadeTotalV.Add(quartoV);

                    totalQuartoOAnterior += quantidadeO4;
                    totalQuartoVAnterior += quantidadeV4;

                    //quantidadeTotalOAnterior.Add(validar(t.quantitativoDesejado(mes, (ano - 1).ToString(), 5, i)));
                    //quantidadeTotalVAnterior.Add(validar(t.quantitativoDesejado(mes, (ano - 1).ToString(), 6, i)));
                }
                else
                {
                    quartoO = validar(t.quantitativoDesejado(mes, ano.ToString(), 5, i));
                    quartoV = validar(t.quantitativoDesejado(mes, ano.ToString(), 6, i));

                    if (i == 1)
                    {
                        quantidadeO1 = validar(t.quantitativoDesejado(mes, (ano - 1).ToString(), 5, i));
                        quantidadeV1 = validar(t.quantitativoDesejado(mes, (ano - 1).ToString(), 6, i));

                        relatorio += "<td>" + i + "</td>";
                        relatorio += "<td>" + quartoO + "</td>";
                        relatorio += "<td>oferta" + i + "%</td>";
                        relatorio += "<td>" + Math.Round(((quartoO - quantidadeO1) * 100) / quantidadeO1, 1) + "%</td>";
                        relatorio += "<td>" + quartoV + "</td>";
                        relatorio += "<td>venda" + i + "%</td>";
                        relatorio += "<td>" + Math.Round(((quartoV - quantidadeV1) * 100) / quantidadeV1, 1) + "%</td>";

                        totalQuartoOAnterior += quantidadeO1;
                        totalQuartoVAnterior += quantidadeV1;
                    }
                    else if (i == 2)
                    {
                        quantidadeO2 = validar(t.quantitativoDesejado(mes, (ano - 1).ToString(), 5, i));
                        quantidadeV2 = validar(t.quantitativoDesejado(mes, (ano - 1).ToString(), 6, i));

                        relatorio += "<td>" + i + "</td>";
                        relatorio += "<td>" + quartoO + "</td>";
                        relatorio += "<td>oferta" + i + "%</td>";
                        relatorio += "<td>" + Math.Round(((quartoO - quantidadeO2) * 100) / quantidadeO2, 1) + "%</td>";
                        relatorio += "<td>" + quartoV + "</td>";
                        relatorio += "<td>venda" + i + "%</td>";
                        relatorio += "<td>" + Math.Round(((quartoV - quantidadeV2) * 100) / quantidadeV2, 1) + "%</td>";

                        totalQuartoOAnterior += quantidadeO2;
                        totalQuartoVAnterior += quantidadeV2;
                    }
                    else
                    {
                        quantidadeO3 = validar(t.quantitativoDesejado(mes, (ano - 1).ToString(), 5, i));
                        quantidadeV3 = validar(t.quantitativoDesejado(mes, (ano - 1).ToString(), 6, i));

                        relatorio += "<td>" + i + "</td>";
                        relatorio += "<td>" + quartoO + "</td>";
                        relatorio += "<td>oferta" + i + "%</td>";
                        relatorio += "<td>" + Math.Round(((quartoO - quantidadeO3) * 100) / quantidadeO3, 1) + "%</td>";
                        relatorio += "<td>" + quartoV + "</td>";
                        relatorio += "<td>venda" + i + "%</td>";
                        relatorio += "<td>" + Math.Round(((quartoV - quantidadeV3) * 100) / quantidadeV3, 1) + "%</td>";

                        totalQuartoOAnterior += quantidadeO3;
                        totalQuartoVAnterior += quantidadeV3;
                    }

                    quartoTipoO.Add("oferta" + i);
                    quartoTipoV.Add("venda" + i);

                    quantidadeTotalO.Add(quartoO);
                    quantidadeTotalV.Add(quartoV);

                    //quantidadeTotalOAnterior.Add(validar(t.quantitativoDesejado(mes, (ano - 1).ToString(), 5, i)));
                    //quantidadeTotalVAnterior.Add(validar(t.quantitativoDesejado(mes, (ano - 1).ToString(), 6, i)));
                }

                relatorio += "</tr>";

                totalQuartoO += quartoO;
                totalQuartoV += quartoV;
            }

            i = 0;
            foreach (var item in quartoTipoO)
            {
                relatorio = relatorio.Replace(item, (Math.Round(quantidadeTotalO[i] * 100 / totalQuartoO, 1)).ToString());
                i++;
            }

            i = 0;
            foreach (var item in quartoTipoV)
            {
                relatorio = relatorio.Replace(item, (Math.Round(quantidadeTotalV[i] * 100 / totalQuartoV, 1)).ToString());
                i++;
            }

            relatorio += "<tr>";
            relatorio += "<th>TOTAL</th>";
            relatorio += "<th>" + totalQuartoO + "</th>";
            relatorio += "<th>100%</th>";
            relatorio += "<th>" + Math.Round((totalQuartoO * 100) / totalQuartoOAnterior - 100, 1) + "%</th>";
            relatorio += "<th>" + totalQuartoV + "</th>";
            relatorio += "<th>100%</th>";
            relatorio += "<th>" + Math.Round((totalQuartoV * 100) / totalQuartoVAnterior - 100, 1) + "%</th>";
            relatorio += "</tr>";

            relatorio += "</table>";

            relatorio += "<script type=\"text/javascript\"> ";
            relatorio += "$(function(){ ";
            relatorio += "$('table#relat tr:even').css('background','#E8E8E8'); ";
            relatorio += "}); ";
            relatorio += "</script> ";

            Panel1.Controls.Add(new LiteralControl(relatorio));
            Panel1.Visible = true;
        }

        double validar(string dado)
        {
            try
            {
                return Convert.ToDouble(dado);
            }
            catch
            {
                return 0;
            }
        }
    }
}
